#line 1 "F:\\桌面\\main - 加led控制\\main\\LGFX_ESP32C3_ST7789.h"
#pragma once  // 确保该头文件只被包含一次

#include <LovyanGFX.hpp>  // 引入 LovyanGFX 库，用于控制显示面板

class LGFX : public lgfx::LGFX_Device {  // 创建LGFX类，继承自 LGFX_Device 基类
  // 声明三个实例，用于配置SPI总线、显示面板、背光
  lgfx::Panel_ST7789 _panel_instance;  // ST7789 显示面板
  lgfx::Bus_SPI _bus_instance;         // SPI 总线
  lgfx::Light_PWM _light_instance;     // 背光控制

public:
  LGFX(void) {
    { // 配置 SPI 总线
      auto cfg = _bus_instance.config();  // 获取总线配置
      cfg.spi_host = SPI2_HOST;           // ESP32-C3 使用 SPI2_HOST（SPI 总线）
      cfg.spi_mode = 0;                   // SPI 模式设置为 0
      cfg.freq_write = 27000000;          // 写入频率为 27 MHz
      cfg.freq_read = 16000000;           // 读取频率为 16 MHz
      cfg.spi_3wire = true;               // 设置为三线SPI（不使用MISO）
      cfg.use_lock = true;                // 启用锁定（线程同步）
      cfg.dma_channel = 1;                // DMA 通道 1
      cfg.pin_sclk = 3;                  // 设置时钟引脚为
      cfg.pin_mosi = 4;                   // 设置数据输出引脚为
      cfg.pin_miso = -1;                  // ST7789 不需要 MISO 引脚
      cfg.pin_dc   = 6;                   // 设置数据/命令引脚为
      _bus_instance.config(cfg);          // 配置 SPI 总线
      _panel_instance.setBus(&_bus_instance);  // 设置面板使用该总线
    }

    { // 配置显示面板参数
      auto cfg = _panel_instance.config();  // 获取面板配置
      cfg.pin_cs   = 7;     // 设置片选引脚为 GPIO 6
      cfg.pin_rst  = 5;    // 设置复位引脚为 GPIO 10
      cfg.pin_busy = -1;    // 不使用忙信号引脚
      cfg.memory_width  = 240;  // 显示面板的内存宽度
      cfg.memory_height = 240; // 显示面板的内存高度
      cfg.panel_width   = 240; // 面板宽度
      cfg.panel_height  = 240; // 面板高度
      cfg.offset_x = 0;        // X轴偏移量
      cfg.offset_y = -80;        // Y轴偏移量
      cfg.offset_rotation = 1; // 不旋转
      // 数值	显示方向	说明
      //  0	默认（0°）	不旋转，竖屏
      // 1	向左旋转 90°	逆时针旋转，横屏显示
      // 2	向下旋转 180°	倒屏显示
      // 3	向右旋转 270°	顺时针旋转，横屏
      cfg.dummy_read_pixel = 8;  // 垃圾读取像素
      cfg.dummy_read_bits  = 1;  // 垃圾读取位
      cfg.readable  = false;     // 不启用读取
      cfg.invert    = true;      // 颜色反转（ST7789 屏幕默认需要）
      cfg.rgb_order = false;     // RGB 顺序（false = RGB, true = BGR）
      cfg.dlen_16bit = false;    // 不使用 16bit 数据长度
      cfg.bus_shared = false;    // 总线不共享
      _panel_instance.config(cfg);  // 配置面板
    }

    { // 配置背光控制（可选）
      auto cfg = _light_instance.config();  // 获取背光配置
      cfg.pin_bl = 8;         // 设置背光引脚
      cfg.invert = false;     // 背光不反转
      cfg.freq   = 44100;     // 背光 PWM 频率为 44.1 kHz
      cfg.pwm_channel = 7;    // 设置背光 PWM 通道
      _light_instance.config(cfg);  // 配置背光控制
      _panel_instance.setLight(&_light_instance);  // 将背光控制与面板关联
    }

    setPanel(&_panel_instance);  // 设置面板为默认面板
  }
};
